<!doctype html>
<html lang="zh-CN">
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="referrer" content="no-referrer-when-downgrade">
    

    <title>Flutter面试题1 | 早起的年轻人</title>
    <meta property="og:title" content="Flutter面试题1 - 早起的年轻人">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content='2021-08-20T23:18:42&#43;08:00'>
        
        
    <meta property="article:modified_time" content='2021-08-20T23:18:42&#43;08:00'>
        
    <meta name="Keywords" content="Flutter，golang,go语言,go语言笔记,飞雪无情,java,android,博客,项目管理,python,软件架构,公众号,小程序">
    <meta name="description" content="Flutter面试题1">
        
    <meta name="author" content="luckly">
    <meta property="og:url" content="https://luckly.work/post/Flutter/flutter%E9%9D%A2%E8%AF%95%E9%A2%981/">
    <link rel="shortcut icon" href='/favicon.ico'  type="image/x-icon">

    <link rel="stylesheet" href='/css/normalize.css'>
    <link rel="stylesheet" href='/css/style.css'>
    <script type="text/javascript" src="//cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    
    
    
        <link href="https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" rel="stylesheet">
    
    
    
    
        <link rel="stylesheet" href='/css/douban.css'>
    
        <link rel="stylesheet" href='/css/other.css'>
    
</head>

<link rel="stylesheet"
      href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/highlight.min.js"></script>
<body>
    <header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="https://luckly.work/">
                        早起的年轻人
                    </a>
                
                <p class="description">专注于Flutter、Android、Java、Go语言(golang)、移动互联网、项目管理、软件架构</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    <a class="current" href="https://luckly.work/">首页</a>
                    
                    <a  href="https://luckly.work/categories/" title="分类">分类</a>
                    
                    <a  href="https://luckly.work/tags/" title="标签">标签</a>
                    
                    <a  href="https://luckly.work/archives/" title="归档">归档</a>
                    
                    <a  href="https://luckly.work/about/" title="关于我">关于我</a>
                    
                    <a  href="https://github.com/ITmxs/" title="github">github</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>

    <div id="body">
        <div class="container">
            <div class="col-group">

                <div class="col-8" id="main">
                    
<div class="res-cons">
    <style type="text/css">
    .post-toc {
        position: fixed;
        width: 200px;
        margin-left: -210px;
        padding: 5px 10px;
        font-family: Athelas, STHeiti, Microsoft Yahei, serif;
        font-size: 12px;
        border: 1px solid rgba(0, 0, 0, .07);
        border-radius: 5px;
        background-color: rgba(255, 255, 255, 0.98);
        background-clip: padding-box;
        -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        word-wrap: break-word;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        z-index: 999;
        cursor: pointer;
        max-height: 70%;
        overflow-y: auto;
        overflow-x: hidden;
    }

    .post-toc .post-toc-title {
        width: 100%;
        margin: 0 auto;
        font-size: 20px;
        font-weight: 400;
        text-transform: uppercase;
        text-align: center;
    }

    .post-toc .post-toc-content {
        font-size: 15px;
    }

    .post-toc .post-toc-content>nav>ul {
        margin: 10px 0;
    }

    .post-toc .post-toc-content ul {
        padding-left: 20px;
        list-style: square;
        margin: 0.5em;
        line-height: 1.8em;
    }

    .post-toc .post-toc-content ul ul {
        padding-left: 15px;
        display: none;
    }

    @media print,
    screen and (max-width:1057px) {
        .post-toc {
            display: none;
        }
    }
</style>
<div class="post-toc" style="position: absolute; top: 188px;">
    <h2 class="post-toc-title">文章目录</h2>
    <div class="post-toc-content">
        <nav id="TableOfContents">
  <ul>
    <li><a href="#什么是flutter"><strong>什么是Flutter？</strong></a></li>
    <li><a href="#什么是dart">什么是Dart？</a></li>
    <li><a href="#特定于设计的widget">特定于设计的widget</a></li>
    <li><a href="#flutterdart-命名约定">Flutter/Dart 命名约定</a></li>
    <li><a href="#flutter-doctor">Flutter Doctor</a></li>
    <li><a href="#flutter-clean">Flutter Clean</a></li>
    <li><a href="#flutter-中的-pubspecyaml-文件是什么">flutter 中的 pubspec.yaml 文件是什么？</a></li>
    <li><a href="#flutter-pub-命令">Flutter pub 命令</a></li>
    <li><a href="#什么是widget">什么是widget？</a></li>
    <li><a href="#flutter-中有多少种类型的widget">Flutter 中有多少种类型的widget？</a></li>
    <li><a href="#有状态和无状态widget有什么区别">有状态和无状态widget有什么区别？</a></li>
    <li><a href="#state-是什么意思什么是-setstate">State 是什么意思？什么是 setState()？</a></li>
    <li><a href="#statefulwidget的生命周期是什么">“StatefulWidget”的生命周期是什么？</a></li>
    <li><a href="#热重载热重启和完全重启有什么区别">热重载、热重启和完全重启有什么区别？</a></li>
    <li><a href="#创建导航有哪些不同的方法">创建导航有哪些不同的方法？</a></li>
    <li><a href="#flutter-的构建模式">Flutter 的构建模式</a></li>
    <li><a href="#调试模式">调试模式</a></li>
    <li><a href="#profile-mode"><strong>Profile mode</strong></a></li>
    <li><a href="#release-mode">Release Mode</a></li>
    <li><a href="#dart-函数中的参数类型">Dart 函数中的参数类型</a></li>
    <li><a href="#future-class-in-dart"><strong>Future class in dart</strong></a></li>
    <li><a href="#什么是future">什么是future？</a></li>
    <li><a href="#同步编程">同步编程</a></li>
    <li><a href="#异步编程">异步编程</a></li>
    <li><a href="#什么是异步和等待"><strong>什么是异步和等待？</strong></a></li>
    <li><a href="#asnyc-与异步">asnyc 与异步*？</a></li>
    <li><a href="#dart-中的-null-感知运算符">Dart 中的 Null 感知运算符</a></li>
    <li><a href="#spread-operator">Spread operator</a></li>
    <li><a href="#null-aware-spread-operator"><strong>Null-aware spread operator</strong></a></li>
    <li><a href="#collection-if"><strong>Collection if</strong></a></li>
    <li><a href="#collection-for"><strong>Collection for</strong></a></li>
    <li><a href="#dynamic--var--final">dynamic — var — final</a></li>
    <li><a href="#flutter的优点">Flutter的优点</a></li>
  </ul>

  <ul>
    <li><a href="#我的参考">我的参考</a></li>
  </ul>
</nav>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function () {
        var postToc = $(".post-toc");
        if (postToc.length) {
            var leftPos = $("#main").offset().left;
            if(leftPos<220){
                postToc.css({"width":leftPos-10,"margin-left":(0-leftPos)})
            }

            var t = postToc.offset().top - 20,
                a = {
                    start: {
                        position: "absolute",
                        top: t
                    },
                    process: {
                        position: "fixed",
                        top: 20
                    },
                };
            $(window).scroll(function () {
                var e = $(window).scrollTop();
                e < t ? postToc.css(a.start) : postToc.css(a.process)
            })
        }
    })
</script>
    <article class="post">
        <header>
            <h1 class="post-title">Flutter面试题1</h1>
        </header>
        <date class="post-meta meta-date">
            2021年8月20日
        </date>
        
        <div class="post-meta">
            <span>|</span>
            
            <span class="meta-category"><a href='/categories/Flutter'>Flutter</a></span>
            
        </div>
        
        
        <div class="post-meta">
            <span id="busuanzi_container_page_pv">|<span id="busuanzi_value_page_pv"></span><span>
                    阅读</span></span>
        </div>
        
        
        <div class="post-content">
            <blockquote>
<p>本文主要介绍我对flutter的想法和理解</p>
</blockquote>
<p>我只是想分享我对flutter的想法和理解。我从维基百科、Stack Overflow 和其他一些媒体文章中获取了所有这些内容。基本上，我以我自己喜欢的顺序/格式包装所有这些内容。相信这篇文章会帮助你对flutter有一个基本的认识，可以用来在准备面试的时候回忆一下你的flutter知识。</p>
<h2 id="什么是flutter"><strong>什么是Flutter？</strong></h2>
<p>Flutter是一个开放源码的UI 由谷歌创建的开发套件。它用于从单个代码库开发适用于 Android、iOS、Linux、Mac、Windows 和 Web 的应用程序。Flutter 应用程序是用 Dart 语言编写的。</p>
<h2 id="什么是dart">什么是Dart？</h2>
<p>Dart 是一种客户端优化的编程语言，适用于多个平台上的应用程序。它由 Google 开发，用于构建移动、桌面、服务器和 Web 应用程序。Dart 是一种面向对象、基于类、垃圾收集的语言，具有 C 风格的语法。Dart 可以编译为原生代码或 JavaScript。</p>
<h2 id="特定于设计的widget">特定于设计的widget</h2>
<p>Flutter 框架包含两组符合特定设计语言的widget。</p>
<ul>
<li><strong>Material Design</strong>widget实现了 Google 的同名设计语言。</li>
<li><strong>Cupertino widget</strong>实现了 Apple 的 iOS 人机界面指南</li>
</ul>
<h2 id="flutterdart-命名约定">Flutter/Dart 命名约定</h2>
<ul>
<li><a href="https://dart.dev/guides/language/effective-dart/style">UpperCamelCase</a> - 类、枚举类型、typedef、扩展和类型参数。</li>
<li><a href="https://dart.dev/guides/language/effective-dart/style">lowerCamelCase</a> - 标识符、常量和方法。</li>
<li><a href="https://dart.dev/guides/language/effective-dart/style">lowercase_with_underscores</a> - 库、包、目录和源文件。</li>
</ul>
<h2 id="flutter-doctor">Flutter Doctor</h2>
<pre><code>flutter doctor
</code></pre><p>此命令会检查您的环境并显示 Flutter 安装状态报告。此命令的输出显示您可能需要安装或执行更多任务的软件列表。</p>
<h2 id="flutter-clean">Flutter Clean</h2>
<pre><code>flutter clean
</code></pre><p>此命令会清除项目的构建缓存。</p>
<h2 id="flutter-中的-pubspecyaml-文件是什么">flutter 中的 pubspec.yaml 文件是什么？</h2>
<p><a href="https://dart.dev/tools/pub/pubspec">pubspec.yaml</a>是一个文件，您可以在其中提供 Flutter 项目的所有依赖项和资产(插件、Dart 版本、字体、图像)。它也是您配置项目名称和描述的地方。</p>
<h2 id="flutter-pub-命令">Flutter pub 命令</h2>
<ul>
<li><strong>flutter pub get</strong> - 此命令获取当前工作目录中 pubspec.yaml 文件中列出的所有依赖项，以及它们的传递依赖项。如果系统缓存尚未包含依赖项，则 pub get 更新缓存，并在必要时下载依赖项。要将包映射回系统缓存，此命令会创建一个 .packages 文件。</li>
<li><strong>flutter pub upgrade</strong> - 此命令获取当前工作目录中 pubspec.yaml 文件中列出的所有依赖项的最新版本，以及它们的传递依赖项。</li>
</ul>
<h2 id="什么是widget">什么是widget？</h2>
<p>Flutter 中的一切都是一个widget，但究竟什么是widget？widget是用户界面元素。</p>
<h2 id="flutter-中有多少种类型的widget">Flutter 中有多少种类型的widget？</h2>
<p>widget要么是有状态的，要么是无状态的。</p>
<ul>
<li>无状态widget</li>
<li>有状态widget</li>
</ul>
<h2 id="有状态和无状态widget有什么区别">有状态和无状态widget有什么区别？</h2>
<ul>
<li><strong>无状态widget</strong>不需要可变状态，即它是不可变的。无状态widget的状态只创建一次——因此，构建方法也只调用一次。简而言之，无状态widget在应用程序运行期间无法更改其状态，这意味着在应用程序运行时无法重绘widget。如果要重绘无状态widget，则需要创建widget的新实例。</li>
<li><strong>有状态widget</strong>具有可变状态，即它们是可变的并且可以在其生命周期内多次绘制。它们是可以多次更改状态的widget，并且可以在应用程序运行时在屏幕上多次重绘。</li>
</ul>
<h2 id="state-是什么意思什么是-setstate">State 是什么意思？什么是 setState()？</h2>
<p>状态是widget的变量值/属性的集合。任何可以改变的东西，比如计数器计数、文本等，都可以成为 State 的一部分。</p>
<p>setState() 本质上是一种告诉应用程序使用新值/属性刷新和重建屏幕的方法。</p>
<p>状态对象由框架创建。为了更改您的widget，您需要更新状态对象，这可以使用可用于有状态widget的 setState() 函数来完成。setState() 设置状态对象的属性，进而触发 UI 的更新。但是这种技术有其自身的缺点。</p>
<h2 id="statefulwidget的生命周期是什么">“StatefulWidget”的生命周期是什么？</h2>
<ul>
<li><code>createState()</code>— a 中的一个方法会<code>StatefulWidget</code>立即被调用，并且应该<code>State</code>为widget返回一个对象</li>
<li><code>initState() </code>—<code>State</code>创建widget后在对象中调用的第一个方法</li>
<li><code>didChangeDependencies()</code>—<code>initState()</code>在第一次构建widget后立即调用</li>
<li><code>build() </code>— 与<code>StatelessWidget</code>. 它在 之后立即调用<code>didChangeDependencies()</code>。每次 UI 需要渲染并返回widget的树时都会调用它。</li>
<li><code>didUpdateWidget()</code> — 当父widget发生变化并需要重绘其 UI 时调用它</li>
<li><code>deactivate()</code>— 调用 before <code>dispose()</code>，当这个对象从树中移除时</li>
<li><code>dispose() </code>— 在释放整个widget及其状态时调用。</li>
</ul>
<h2 id="热重载热重启和完全重启有什么区别">热重载、热重启和完全重启有什么区别？</h2>
<p>Flutter 的热重载功能可帮助您快速轻松地进行实验、构建 UI、添加功能和修复错误。热重载的工作原理是将更新的源代码文件注入正在运行的 Dart 虚拟机 (VM)。VM 用新版本的字段和函数更新类后，Flutter 框架会自动重建widget树，让您可以快速查看更改的效果。</p>
<ul>
<li><strong>热重载</strong>将代码更改加载到 VM 中并重新构建widget树，保留应用程序状态；它不会重新运行 main() 或 initState()。热重载比热重启花费的时间更少。</li>
<li><strong>热重启</strong>将代码更改加载到 VM 中，并重新启动 Flutter 应用程序，从而丢失应用程序状态。热重启比热重载花费的时间长得多。</li>
<li><strong>完全重新</strong>启动会<strong>重新</strong>启动 iOS、Android 或 Web 应用程序。这需要更长的时间，因为它还会重新编译 Java/Kotlin/ObjC/Swift 代码。在 Web 上，它还会重新启动 Dart 开发编译器。</li>
</ul>
<h2 id="创建导航有哪些不同的方法">创建导航有哪些不同的方法？</h2>
<p>Flutter中创建导航的三种方式</p>
<ul>
<li><strong>直接导航</strong>与<code>MaterialPageRoute</code></li>
</ul>
<pre><code>Route route = MaterialPageRoute(builder: (context) =&gt; NextScreen());
Navigator.push(context, route);
</code></pre><ul>
<li>带有map route的<strong>静态导航</strong>- 您可以在 MaterialApp 中创建routes map，然后使用其名称push它</li>
</ul>
<p><em>在 MaterialApp 中创建</em>routes map*</p>
<pre><code>void main() {
  runApp(
    MaterialApp(
      initialRoute: '/home',
      routes: &lt;String, WidgetBuilder&gt;{
        '/home': (context) =&gt; HomePage(),
        '/second': (context) =&gt; SecondHome(),
      },
    )
  );
}
</code></pre><p><em>使用它的名字</em>Pushing*</p>
<pre><code>Navigator.pushNamed(context, '/second');
</code></pre><ul>
<li>生成路由的<strong>动态导航</strong>——即在 MaterialApp 类中实现 onGenerateRoute 回调</li>
</ul>
<pre><code>MaterialApp(
  home: SecondPage(),
  onGenerateRoute: (RouteSettings settings) {
    switch (settings.name) {
      case '/home':
        return MaterialPageRoute(builder: (context)=&gt; HomePage());
        break;
      case '/second':
        return MaterialPageRoute(builder: (context)=&gt; SecondPage());
        break;
    }
  },
),
</code></pre><h2 id="flutter-的构建模式">Flutter 的构建模式</h2>
<p>Flutter 工具支持三种模式</p>
<ul>
<li>当您想使用热重载时，请在开发期间使用<strong>调试模式</strong>。<strong>debug mode</strong></li>
<li>当您要分析性能时，请使用<strong>配置文件模式</strong>。 <strong>profile mode</strong></li>
<li>当您准备好发布您的应用程序时，请使用<strong>发布模式</strong>。 <strong>profile mode</strong></li>
</ul>
<h2 id="调试模式">调试模式</h2>
<ul>
<li>热重载仅适用于调试模式。</li>
<li>模拟器和模拟器仅在调试模式下执行。</li>
<li>应用程序性能在调试模式下可能会很糟糕。</li>
<li>断言已启用。</li>
<li>服务扩展已启用。</li>
<li>编译针对快速开发和运行周期进行了优化(但不是针对执行速度、二进制大小或部署)。</li>
<li>调试开启，支持源码级调试的工具(如DevTools)可以连接到进程。</li>
</ul>
<h2 id="profile-mode"><strong>Profile mode</strong></h2>
<ul>
<li>在配置文件模式下，保留了一些调试功能——足以配置应用程序的性能。</li>
<li>模拟器和模拟器上禁用了配置文件模式，因为它们的行为不代表实际性能。</li>
<li>在移动设备上，配置文件模式类似于发布模式。</li>
<li>启用了一些服务扩展，例如启用性能覆盖的服务扩展。</li>
<li>启用跟踪，支持源级调试的工具(如 DevTools)可以连接到进程。</li>
</ul>
<h2 id="release-mode">Release Mode</h2>
<ul>
<li>使用发布模式部署应用程序，当你想要最大</li>
<li>优化和最小的占地面积。</li>
<li>断言被禁用。</li>
<li>调试信息被剥离。</li>
<li>调试被禁用。</li>
<li>编译针对快速启动、快速执行和小包大小进行了优化。</li>
<li>服务扩展被禁用。</li>
</ul>
<h2 id="dart-函数中的参数类型">Dart 函数中的参数类型</h2>
<p>一个函数可以有两种类型的参数：<em>required</em>和<em>optional</em>。</p>
<ul>
<li>Dart 的可选参数是<em>可选</em>的，因为调用者在调用函数时不需要为参数指定值。</li>
<li>可选参数可以是命名的或位置的，但不能两者兼而有之。</li>
<li>可选参数只能在任何必需参数之后声明。</li>
<li>可选参数可以有一个默认值，在调用者没有指定值时使用。</li>
<li>您可以从[这里](<a href="https://stackoverflow.com/questions/13264230/what-is-the-difference-between-named-and-positional-parameters-in-dart#:~:text=Dart">https://stackoverflow.com/questions/13264230/what-is-the-difference-between-named-and-positional-parameters-in-dart#:~:text=Dart</a> has two types of optional parameters%3A named and positional.&amp;text=Dart&rsquo;s optional parameters are optional,declared after any required parameters)获得更好的clarity</li>
</ul>
<h2 id="future-class-in-dart"><strong>Future class in dart</strong></h2>
<p>Future 用于表示将来某个时间可用的潜在值或错误。</p>
<p>Future 的接收者可以注册回调，一旦它可用，就可以处理该值或错误。</p>
<h2 id="什么是future">什么是future？</h2>
<p>Future 是 Future 类的一个实例。Future 表示异步操作的结果。它可以有两种状态：<em>未完成</em>或<em>已完成</em>。</p>
<ul>
<li><strong>未完成</strong>——当你调用一个异步函数时，它返回一个未完成的未来。那个未来正在等待函数的异步操作完成或抛出错误。</li>
<li><strong>已完成</strong>— 如果异步操作成功，则未来完成并带有一个值。否则，它将以错误结束。</li>
</ul>
<h2 id="同步编程">同步编程</h2>
<p>在同步编程中，代码将逐行执行。</p>
<ul>
<li><em>同步操作</em>——同步操作阻止其他操作执行，直到它完成。</li>
<li><em>同步函数</em>——同步函数只执行同步操作。</li>
</ul>
<h2 id="异步编程">异步编程</h2>
<p>异步操作让您的程序在等待另一个操作完成的同时完成工作。</p>
<ul>
<li><em>异步操作</em>- 一旦启动，异步操作允许其他操作在完成之前执行。</li>
<li><em>异步函数</em>——异步函数至少执行一个异步操作，也可以执行同步操作。</li>
</ul>
<p>一个<code>async</code>函数同步运行直到第一个<code>await</code>关键字。这意味着在<code>async</code>函数体内，第一个<code>await</code>关键字之前的所有同步代码都会立即执行。</p>
<h2 id="什么是异步和等待"><strong>什么是异步和等待？</strong></h2>
<p>async 和 await 关键字提供了一种声明方式来定义异步函数并使用它们的结果。</p>
<ul>
<li><strong>async</strong> — 您可以<code>async</code>在函数体之前使用关键字将其标记为异步。</li>
<li><strong>await</strong> — 您可以使用<code>await</code>关键字来获取异步表达式的完整结果。该<code>await</code>关键字仅在<code>async</code>函数内起作用。</li>
</ul>
<h2 id="asnyc-与异步">asnyc 与异步*？</h2>
<ul>
<li><strong>async</strong>给你一个<code>Future</code>——你将 async 关键字添加到一个函数中，该函数执行一些可能需要很长时间的工作。它返回包装在 Future 中的结果。</li>
<li>**async**<em>给你一个<code>Stream</code>- 你添加 async</em> 关键字来创建一个函数，一次返回一堆未来值。结果被包装在一个流中。</li>
</ul>
<h2 id="dart-中的-null-感知运算符">Dart 中的 Null 感知运算符</h2>
<p>dart 中的空感知运算符允许您根据值是否为空进行计算。它是较长表达式的简写。您可以从<a href="https://medium.com/@thinkdigitalsoftware/null-aware-operators-in-dart-53ffb8ae80bb">这里</a>获得更好的clarity。</p>
<ul>
<li><strong>??</strong></li>
</ul>
<pre><code>//assign y to x, unless y is null. Otherwise, assign z.
x = y ?? z
</code></pre><ul>
<li><strong>??=</strong></li>
</ul>
<pre><code>//如果 x 为空，则将 y 分配给 x。
x ??= y
</code></pre><ul>
<li><strong>?.</strong></li>
</ul>
<pre><code>// 仅当 x 不为空时才调用 foo()。
x?.foo()
</code></pre><h2 id="spread-operator">Spread operator</h2>
<p>您可以使用展开运算符 ( <code>...</code>) 将一个列表的所有值插入到另一个列表中。</p>
<pre><code>var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
</code></pre><h2 id="null-aware-spread-operator"><strong>Null-aware spread operator</strong></h2>
<p>如果展开运算符右侧的表达式可能为空，则可以使用可识别空值的展开运算符 ( <code>...?</code>)来避免异常。</p>
<pre><code>var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
</code></pre><h2 id="collection-if"><strong>Collection if</strong></h2>
<p>您可以使用条件来构建集合。</p>
<pre><code>var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];
</code></pre><h2 id="collection-for"><strong>Collection for</strong></h2>
<p>您可以使用重复来构建集合。</p>
<pre><code>var listOfInts = [1, 2, 3];
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
</code></pre><h2 id="dynamic--var--final">dynamic — var — final</h2>
<ul>
<li>**dynamic **——可以改变变量的类型，也可以改变变量的值。</li>
<li><strong>var</strong> — 不能改变变量的类型，但可以改变变量的值。</li>
<li><strong>final</strong> — 不能在代码中更改变量的类型，也不能更改变量的值。</li>
</ul>
<pre><code>dynamic v = 123;// v 是 int 类型。
v = 456；// 将 v 的值从 123 更改为 456。
v = 'abc'; // 将 v 的类型从 int 更改为 String。无功 v = 123; // v 是 int 类型。
v = 456；// 将 v 的值从 123 更改为 456。
v = 'abc'; // 错误：无法将 v 的类型从 int 更改为 String。最终 v = 123；// v 是 int 类型。
v = 456；// 错误：无法将 v 的值从 123 更改为 456。
v = 'abc'; // 错误：无法将 v 的类型从 int 更改为 String。
</code></pre><h2 id="flutter的优点">Flutter的优点</h2>
<ul>
<li>
<p>跨平台开发</p>
</li>
<li>
<p>更快的开发</p>
</li>
<li>
<p>好社区</p>
</li>
<li>
<p>实时和热重载</p>
</li>
<li>
<p>原生性能</p>
</li>
<li>
<p>提供原生的外观和感觉</p>
</li>
<li>
<p>如何动态更新 ListView？</p>
</li>
<li>
<p>ChangeNotifier 和 notifyListeners 在 Provider 中的作用是什么？</p>
</li>
<li>
<p>什么是 ValueListenableBuilder？</p>
</li>
<li>
<p>列举几个 Flutter 团队开发的插件？</p>
</li>
<li>
<p>Dart AOT 是如何工作的？</p>
</li>
<li>
<p>Dart中var和dynamic类型的区别？</p>
</li>
<li>
<p>Dart中&rsquo;const&rsquo;和&rsquo;final&rsquo;关键字之间的区别？</p>
</li>
<li>
<p>TextEditingController 的重要性是什么？</p>
</li>
<li>
<p>为什么我们在 Listview 中使用“Reverse”属性？</p>
</li>
<li>
<p>Modal 和 Persistent BottomSheet 的区别举个例子？</p>
</li>
<li>
<p>Inherited Widget 与 Provider 有何不同？</p>
</li>
<li>
<p>为了使 CrossAxisAlignment.baseline 工作，我们需要设置的另一个属性是什么？</p>
</li>
<li>
<p>我们什么时候应该使用resizeToAvoidBottomInset？</p>
</li>
</ul>
<h1 id="谢谢">谢谢…</h1>
<h2 id="我的参考">我的参考</h2>
<h1 id="构建生命周期管理器来管理您的服务">构建生命周期管理器来管理您的服务</h1>
<p>最近提出的问题是当应用程序进入后台时如何停止服务。这篇文章将向您展示如何以可扩展的方式在一个地方处理所有这些。我们将使用 WidgetsBindingObserver 来监听<code>AppLifecycleState</code>和调用我们服务的停止/启动。我们将首先创建管理器并用它包装我们的应用程序。创建一个名为lifecycle_manager.dart 的新文件</p>
<pre><code>class LifeCycleManager extends StatefulWidget {
  final Widget child;
  LifeCycleManager({Key key, this.child}) : super(key: key);
  _LifeCycleManagerState createState() =&gt; _LifeCycleManagerState();
}
class _LifeCycleManagerState extends State&lt;LifeCycleManager&gt;
    with WidgetsBindingObserver {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }
  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print('state = $state');
  }
  @override
  Widget build(BuildContext context) {
    return Container(
      child: widget.child,
    );
  }
}
</code></pre><p>然后在主文件中，我们可以<code>MaterialApp</code>用新的小部件包装我们的。</p>
<pre><code>class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LifeCycleManager(
      child: MaterialApp(
        title: 'Flutter Demo',
        home: HomeView(),
      ),
    );
  }
}
</code></pre><p>如果您运行它并最小化您的应用程序，您将在控制台中看到打印出的状态日志。</p>
<pre><code>state = AppLifecycleState.inactive
state = AppLifecycleState.paused
state = AppLifecycleState.inactive
state = AppLifecycleState.resumed
</code></pre><p>我们将使用它来决定调用我们的服务的内容。为了给订阅流的服务提供一个通用接口，我们将创建一个这些服务必须实现的 StoppableService 抽象类。我们将向基类添加一些功能以跟踪它是否已停止，以便我们也可以利用它。</p>
<pre><code>abstract class StoppableService {
  bool _serviceStoped = false;
  bool get serviceStopped =&gt; _serviceStoped;
  @mustCallSuper
  void stop() {
    _serviceStoped = true;
  }
  @mustCallSuper
  void start() {
    _serviceStoped = false;
  }
}
</code></pre><p>这个的实现看起来像这样。</p>
<pre><code>class LocationService extends StoppableService {
  @override
  void start() {
    super.start();
    // start subscription again
  }
  @override
  void stop() {
    super.stop();
    // cancel stream subscription
  }
}
</code></pre><p>我们缺乏 Flutter 中反射的好处，因此我们必须在 LifeCycleManager 中跟踪这些服务并循环它们以停止和启动它们。在<code>LifeCycleManager</code>我们将保留一个列表<code>StoppableServices</code>并在生命周期函数调用中循环它们。</p>
<pre><code>class _LifeCycleManagerState extends State&lt;LifeCycleManager&gt;
    with WidgetsBindingObserver {
  List&lt;StoppableService&gt; services = [
    locator&lt;LocationService&gt;(),
  ];
  ...
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    services.forEach((service) {
      if (state == AppLifecycleState.resumed) {
        service.start();
      } else {
        service.stop();
      }
    });
  }
}
</code></pre><p>如果您使用的架构类似于我<a href="https://www.filledstacks.com/post/flutter-architecture-my-provider-implementation-guide">在这里展示</a>的架构，则现在可以将其添加到您的应用程序中。在基于生命周期事件取消/重新订阅时，它为您提供了一个管理所有服务的单一位置。在此处查看我的一些其他<a href="https://www.filledstacks.com/tutorials">教程</a>和<a href="https://www.filledstacks.com/snippets">片段</a>。</p>
<p>明天见</p>
<p><a href="https://www.filledstacks.com/post/flutter-architecture-my-provider-implementation-guide/">https://www.filledstacks.com/post/flutter-architecture-my-provider-implementation-guide/</a></p>
<p>我啦啦啦https://www.filledstacks.com/snippets</p>
<p><a href="https://medium.com/geekculture/writing-custom-widgets-in-flutter-part-3-b-simpleoverlay-no-helpers-9ddf45cea983">https://medium.com/geekculture/writing-custom-widgets-in-flutter-part-3-b-simpleoverlay-no-helpers-9ddf45cea983</a></p>
<p>github <a href="https://github.com/MatrixDev/Flutter-CustomWidgets/tree/main/lib">https://github.com/MatrixDev/Flutter-CustomWidgets/tree/main/lib</a></p>
        </div>

        
<div class="post-archive">
    <ul class="post-copyright">
        <li><strong>原文作者：</strong><a rel="author" href="https://luckly.work/">luckly</a></li>
        <li style="word-break:break-all"><strong>原文链接：</strong><a href="https://luckly.work/post/Flutter/flutter%E9%9D%A2%E8%AF%95%E9%A2%981/">https://luckly.work/post/Flutter/flutter%E9%9D%A2%E8%AF%95%E9%A2%981/</a></li>
        <li><strong>版权声明：</strong>本作品采用<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/">知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议</a>进行许可，非商业转载请注明出处（作者，原文链接），商业转载请联系作者获得授权。</li>
    </ul>
</div>
<br/>



        

<div class="post-archive">
    <h2>See Also</h2>
    <ul class="listing">
        
        <li><a href="/post/flutter_tips/Flutter%E5%B8%B8%E7%94%A8%E7%9A%84%E5%BF%AB%E6%8D%B7%E9%94%AE-AS/">《Flutter常用的快捷键 AS》</a></li>
        
        <li><a href="/post/flutter_tips/Flutter%E5%AF%B9list%E6%8E%92%E5%BA%8F/">《如何根据函数返回的值对dart中的List进行排序》</a></li>
        
        <li><a href="/post/flutter_widget/%E8%87%AA%E5%AE%9A%E4%B9%89widget/">自定义widget</a></li>
        
        <li><a href="/post/flutter_tips/Flutter%E4%BD%BF%E7%94%A8Spread%E5%87%8F%E5%B0%91%E4%BB%A3%E7%A0%81%E8%A1%8C/">Flutter使用Spread减少代码行</a></li>
        
        <li><a href="/post/flutter_package/autocomplete_textfield%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%E6%90%9C%E7%B4%A0/">Autocomplete_textfield自动完成搜素</a></li>
        
    </ul>
</div>


        <div class="post-meta meta-tags">
            
            <ul class="clearfix">
                
                <li><a href='/tags/Flutter'>Flutter</a></li>
                
            </ul>
            
        </div>
    </article>
    
    

    
    
    <div class="post bg-white">
      <script src="https://utteranc.es/client.js"
            repo= "https://github.com/ITmxs/repo"
            issue-term="pathname"
            theme="github-light"
            crossorigin="anonymous"
            async>
      </script>
    </div>
    
</div>

                    <footer id="footer">
    <div>
        &copy; 2021 <a href="https://luckly.work/">早起的年轻人 By luckly</a>
        
        | <a rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">粤ICP备2021号-1</a>
        
    </div>
    <br />
    <div>
        <div class="github-badge">
            <a href="https://juejin.cn/user/3843548384077192" target="_black" rel="nofollow"><span class="badge-subject">Powered by</span><span class="badge-value bg-blue">掘金</span></a>
        </div>
        <div class="github-badge">
            <a href="https://space.bilibili.com/480883651" target="_black"><span class="badge-subject">Design by</span><span class="badge-value bg-brightgreen">早起的年轻人</span></a>
        </div>
        <div class="github-badge">
            <a href="https://cloud.tencent.com/developer/user/6702670" target="_black"><span class="badge-subject">Theme</span><span class="badge-value bg-yellowgreen">云社区</span></a>
        </div>
    </div>
</footer>


    
    <script type="text/javascript">
        window.MathJax = {
            tex2jax: {
                inlineMath: [['$', '$']],
                processEscapes: true
                }
            };
    </script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script><script src="https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src='/js/totop.js?v=0.0.0' async=""></script>



    <script type="text/javascript" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script>




    <script src='/js/douban.js'></script>
    <script src="/js/copy-to-clipboard.js"></script>

                </div>

                <div id="secondary">
    <section class="widget">
        <form id="search" action='https://luckly.work/search/' method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="https://luckly.work/">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>
    
    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://luckly.work/post/nginx/nginx%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9/" title="Nginx文件内容">Nginx文件内容</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/nginx/nginx%E6%9E%81%E7%AE%80%E6%95%99%E7%A8%8B/" title="Nginx极简教程">Nginx极简教程</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/nginx/%E5%8D%81%E5%88%86%E9%92%9F%E5%85%A5%E9%97%A8nginx/" title="十分钟入门Nginx">十分钟入门Nginx</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/go/Goland%E8%BF%9C%E7%A8%8B%E5%BC%80%E5%8F%91%E9%85%8D%E7%BD%AE/" title="Goland远程开发配置">Goland远程开发配置</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/%E8%AF%BB%E4%B9%A6/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" title="域名解析">域名解析</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/git/%E6%8F%90%E4%BA%A4%E8%BF%87%E7%A8%8B%E7%9C%81%E7%95%A5%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6/" title="提交过程省略某些文件">提交过程省略某些文件</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/flutter_tips/Flutter_DropdownButton%E7%A4%BA%E4%BE%8B/" title="Flutter_DropdownButton示例">Flutter_DropdownButton示例</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/flutter_tips/Flutter_ExpansionPanelList%E5%92%8CExpansionPanelList.radio%E7%A4%BA%E4%BE%8B/" title="Flutter_ExpansionPanelList和ExpansionPanelList">Flutter_ExpansionPanelList和ExpansionPanelList</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/flutter_tips/Flutter%E5%BE%AE%E4%BF%A1%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E8%B7%B3%E5%9B%9EApp%E6%8C%87%E5%AE%9A%E9%A1%B5%E9%9D%A2/" title="Flutter微信分享链接跳回App指定页面">Flutter微信分享链接跳回App指定页面</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F/%E5%A4%96%E5%8C%85%E5%8F%AF%E8%83%BD%E7%9A%84%E9%97%AE%E9%A2%98/" title="外包可能的问题">外包可能的问题</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title"><a href='/categories/'>分类</a></h3>
<ul class="widget-list">
    
    <li><a href="https://luckly.work/categories/Flutter/">Flutter (326)</a></li>
    
    <li><a href="https://luckly.work/categories/IT/">IT (2)</a></li>
    
    <li><a href="https://luckly.work/categories/Kotlin/">Kotlin (2)</a></li>
    
    <li><a href="https://luckly.work/categories/Mysql/">Mysql (1)</a></li>
    
    <li><a href="https://luckly.work/categories/nginx/">nginx (1)</a></li>
    
    <li><a href="https://luckly.work/categories/Vue/">Vue (6)</a></li>
    
    <li><a href="https://luckly.work/categories/YouTube%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD/">YouTube视频下载 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/android/">android (6)</a></li>
    
    <li><a href="https://luckly.work/categories/dart/">dart (96)</a></li>
    
    <li><a href="https://luckly.work/categories/Flutter/">Flutter (28)</a></li>
    
    <li><a href="https://luckly.work/categories/gin/">gin (25)</a></li>
    
    <li><a href="https://luckly.work/categories/git/">git (4)</a></li>
    
    <li><a href="https://luckly.work/categories/Go/">Go (102)</a></li>
    
    <li><a href="https://luckly.work/categories/gorm/">gorm (4)</a></li>
    
    <li><a href="https://luckly.work/categories/grpc/">grpc (1)</a></li>
    
    <li><a href="https://luckly.work/categories/html/">html (3)</a></li>
    
    <li><a href="https://luckly.work/categories/ios/">ios (1)</a></li>
    
    <li><a href="https://luckly.work/categories/linux/">linux (1)</a></li>
    
    <li><a href="https://luckly.work/categories/nginx/">nginx (6)</a></li>
    
    <li><a href="https://luckly.work/categories/python/">python (35)</a></li>
    
    <li><a href="https://luckly.work/categories/read/">读书笔记 (6)</a></li>
    
    <li><a href="https://luckly.work/categories/redis/">redis (2)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%B8%AA%E4%BA%BA%E8%B5%84%E6%96%99/">个人资料 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%B9%A6%E5%8D%95/">书单 (8)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%B9%A6%E8%AF%84/">书评 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统管理师 (19)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统项目管理师 (25)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%8E%9F%E5%88%99/">原则 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%8E%9F%E7%94%9F%E9%80%9A%E8%AE%AF/">原生通讯 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%9F%BA%E7%A1%80/">基础 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%A4%8D%E5%88%A9%E6%95%88%E5%BA%94/">复利效应 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%B0%91%E6%9C%89%E4%BA%BA%E8%B5%B0%E7%9A%84%E8%B7%AF/">少有人走的路 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%BF%83%E8%AF%AD/">心语 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E6%8F%92%E4%BB%B6/">插件 (2)</a></li>
    
    <li><a href="https://luckly.work/categories/%E6%95%99%E5%AD%A6/">教学 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%8E%8B%E9%98%B3%E6%98%8E/">王阳明 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%94%B5%E5%AD%90%E4%B9%A6/">电子书 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%99%BB%E9%99%86%E8%A1%A8%E5%8D%95/">登陆表单 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%A8%BB%E7%9B%9B%E5%92%8C%E5%A4%AB/">稻盛和夫 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%A9%B7%E7%88%B8%E7%88%B8%E5%AF%8C%E7%88%B8%E7%88%B8/">穷爸爸富爸爸 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%B2%BE%E8%BF%9B/">精进 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%BC%96%E7%A8%8B/">编程 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%99%9A%E5%B9%BB/">虚幻 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B9%8B%E8%B7%AF/">财务自由之路 (2)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B7%91%E6%AD%A5/">跑步 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B7%AF%E7%94%B1%E4%BC%A0%E5%8F%82/">路由传参 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B7%AF%E7%BA%BF/">路线 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%BD%AF%E4%BB%B6%E5%AE%9E%E6%96%BD/">软件实施 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E9%98%B3%E6%98%8E%E5%BF%83%E5%AD%A6/">阳明心学 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E9%A1%B9%E7%9B%AE/">项目 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E9%AD%85%E5%8A%9B/">魅力 (1)</a></li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title"><a href='/tags/'>标签</a></h3>
<div class="tagcloud">
    
    <a href="https://luckly.work/tags/flutter/">flutter</a>
    
    <a href="https://luckly.work/tags/IT/">IT</a>
    
    <a href="https://luckly.work/tags/Kotlin/">Kotlin</a>
    
    <a href="https://luckly.work/tags/Mysql/">Mysql</a>
    
    <a href="https://luckly.work/tags/nginx/">nginx</a>
    
    <a href="https://luckly.work/tags/Vue/">Vue</a>
    
    <a href="https://luckly.work/tags/YouTube%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD/">YouTube视频下载</a>
    
    <a href="https://luckly.work/tags/android/">android</a>
    
    <a href="https://luckly.work/tags/dart/">dart</a>
    
    <a href="https://luckly.work/tags/flutter/">flutter</a>
    
    <a href="https://luckly.work/tags/gin/">gin</a>
    
    <a href="https://luckly.work/tags/git/">git</a>
    
    <a href="https://luckly.work/tags/go/">go</a>
    
    <a href="https://luckly.work/tags/gorm/">gorm</a>
    
    <a href="https://luckly.work/tags/grpc/">grpc</a>
    
    <a href="https://luckly.work/tags/html/">html</a>
    
    <a href="https://luckly.work/tags/ios/">ios</a>
    
    <a href="https://luckly.work/tags/linux/">linux</a>
    
    <a href="https://luckly.work/tags/nginx/">nginx</a>
    
    <a href="https://luckly.work/tags/python/">python</a>
    
    <a href="https://luckly.work/tags/redis/">redis</a>
    
    <a href="https://luckly.work/tags/%E4%B8%AA%E4%BA%BA%E8%B5%84%E6%96%99/">个人资料</a>
    
    <a href="https://luckly.work/tags/%E4%B9%A6%E5%8D%95/">书单</a>
    
    <a href="https://luckly.work/tags/%E4%B9%A6%E8%AF%84/">书评</a>
    
    <a href="https://luckly.work/tags/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统管理师</a>
    
    <a href="https://luckly.work/tags/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统项目管理师</a>
    
    <a href="https://luckly.work/tags/%E5%85%A5%E9%97%A8/">入门</a>
    
    <a href="https://luckly.work/tags/%E5%8E%9F%E5%88%99/">原则</a>
    
    <a href="https://luckly.work/tags/%E5%8E%9F%E7%94%9F%E9%80%9A%E8%AE%AF/">原生通讯</a>
    
    <a href="https://luckly.work/tags/%E5%9F%BA%E7%A1%80/">基础</a>
    
    <a href="https://luckly.work/tags/%E5%A4%8D%E5%88%A9%E6%95%88%E5%BA%94/">复利效应</a>
    
    <a href="https://luckly.work/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
    
    <a href="https://luckly.work/tags/%E5%B0%91%E6%9C%89%E4%BA%BA%E8%B5%B0%E7%9A%84%E8%B7%AF/">少有人走的路</a>
    
    <a href="https://luckly.work/tags/%E5%BF%83%E8%AF%AD/">心语</a>
    
    <a href="https://luckly.work/tags/%E6%8F%92%E4%BB%B6/">插件</a>
    
    <a href="https://luckly.work/tags/%E6%95%99%E5%AD%A6/">教学</a>
    
    <a href="https://luckly.work/tags/%E7%8E%8B%E9%98%B3%E6%98%8E/">王阳明</a>
    
    <a href="https://luckly.work/tags/%E7%94%B5%E5%AD%90%E4%B9%A6/">电子书</a>
    
    <a href="https://luckly.work/tags/%E7%99%BB%E9%99%86%E8%A1%A8%E5%8D%95/">登陆表单</a>
    
    <a href="https://luckly.work/tags/%E7%A8%BB%E7%9B%9B%E5%92%8C%E5%A4%AB/">稻盛和夫</a>
    
    <a href="https://luckly.work/tags/%E7%A9%B7%E7%88%B8%E7%88%B8%E5%AF%8C%E7%88%B8%E7%88%B8/">穷爸爸富爸爸</a>
    
    <a href="https://luckly.work/tags/%E7%B2%BE%E8%BF%9B/">精进</a>
    
    <a href="https://luckly.work/tags/%E7%BC%96%E7%A8%8B/">编程</a>
    
    <a href="https://luckly.work/tags/%E8%99%9A%E5%B9%BB/">虚幻</a>
    
    <a href="https://luckly.work/tags/%E8%AF%97/">诗</a>
    
    <a href="https://luckly.work/tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/">读书笔记</a>
    
    <a href="https://luckly.work/tags/%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B9%8B%E8%B7%AF/">财务自由之路</a>
    
    <a href="https://luckly.work/tags/%E8%B7%91%E6%AD%A5/">跑步</a>
    
    <a href="https://luckly.work/tags/%E8%B7%AF%E7%94%B1%E4%BC%A0%E5%8F%82/">路由传参</a>
    
    <a href="https://luckly.work/tags/%E8%B7%AF%E7%BA%BF/">路线</a>
    
    <a href="https://luckly.work/tags/%E8%BD%AF%E4%BB%B6%E5%AE%9E%E6%96%BD/">软件实施</a>
    
    <a href="https://luckly.work/tags/%E9%80%9A%E8%AE%AF%E5%BD%95/">通讯录</a>
    
    <a href="https://luckly.work/tags/%E9%98%B3%E6%98%8E%E5%BF%83%E5%AD%A6/">阳明心学</a>
    
    <a href="https://luckly.work/tags/%E9%A1%B9%E7%9B%AE/">项目</a>
    
    <a href="https://luckly.work/tags/%E9%AD%85%E5%8A%9B/">魅力</a>
    
</div>
    </section>

    
<section class="widget">
    <h3 class="widget-title">友情链接</h3>
    <ul class="widget-list">
        
        <li>
            <a target="_blank" href="http://www.topgoer.com/" title="枯藤">枯藤</a>
        </li>
        
        <li>
            <a target="_blank" href="https://gorm.cn/zh_CN/docs/index.html" title="gorm">gorm</a>
        </li>
        
        <li>
            <a target="_blank" href="https://docs.python.org/zh-cn/3/tutorial/index.html" title="python">python</a>
        </li>
        
        <li>
            <a target="_blank" href="https://www.liwenzhou.com/" title="李文周">李文周的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="http://www.xbzweb.com/" title="小包子的博客">小包子的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="https://www.flysnow.org/" title="飞雪无情的博客">飞雪无情的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="https://sliverhorn.com/" title="sliverhorn的博客">sliverhorn的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="http://yuedu.baidu.com/ebook/14a722970740be1e640e9a3e" title="Android Gradle权威指南">Android Gradle权威指南</a>
        </li>
        
        <li>
            <a target="_blank" href="https://gesdh.cn/" title="小格子">格子导航</a>
        </li>
        
        <li>
            <a target="_blank" href="https://itachi.xyz/" title="阿林">itachi&#39;s Blog</a>
        </li>
        
        <li>
            <a target="_blank" href="https://darjun.github.io/" title="大俊">大俊Blog</a>
        </li>
        
        <li>
            <a target="_blank" href="https://geektutu.com/post/quick-golang.html" title="极客兔兔">极客兔兔Blog</a>
        </li>
        
        <li>
            <a target="_blank" href="http://zxfcumtcs.github.io/" title="赵雪峰">雪峰Blog</a>
        </li>
        
    </ul>
</section>


    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="https://luckly.work/index.xml">文章 RSS</a></li>
        </ul>
    </section>
</div>
            </div>
        </div>
    </div>
</body>

</html>